# 正则匹配
# 导入
import re

# 正则对象
prog = re.compile('\d{2}')
# 查找字符串
print(prog.search('123ab'), prog.match('12abc'))
# 通过group方法得到匹配的字符串
print(prog.search('123bc').group(), prog.match('12abc').group())
# 直接通过re.search查找
print(re.search('\d{2}', '123ab').group(), re.match('\d{2}', '123ab').group())

# 用 pattern 拆分 string
print(re.split(r'\W+', 'Words, words, words.'))

# 整个 string 匹配到正则表达式样式
print(re.fullmatch(r'\d{2}', 'Word'), re.fullmatch(r'\d{2}', '12').group(), re.fullmatch(r'\d{2}', '123'))

# 对 string 返回一个不重复的 pattern 的匹配列表， string 从左到右进行扫描，匹配按找到的顺序返回
print(re.findall('a', 'This is a beautiful place!'))

# 对 string 返回一个不重复的 pattern 的匹配迭代器
ret = re.finditer('[ab]', 'This is a beautiful place!')
print(ret)
for i in ret:
    print(i, i.group())

# 匹配字符串替换
print(re.sub('\d', 'S', 'abc12jh45li78', 2))  # 将匹配到的数字替换成S,替换2个
print(re.subn('\d', 'S', 'abc12jh45li78', 2))  # 将匹配到的数字替换成S,替换2个

# 转义字符
print(re.escape('http://www.python.org'))

# 清除正则表达式的缓存
re.purge()

# 正则对象属性
prog = re.compile('\d{3}')
print(prog.flags, prog.groups, prog.groupindex, prog.pattern)
